home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / dsp / dspgroup / macrosrc.arc / CASE.ASM < prev    next >
Encoding:
Assembly Source File  |  1983-11-17  |  1.1 KB  |  46 lines

  1.  
  2. *CASE
  3. *AFFECTS: XR0, AR1, AC, STACK
  4. *
  5. *CASE CONSTRUCT:
  6. *      CASE  V,(L0,L1,L2, ... ,LN)[,T]
  7. *      [RETURNS HERE]
  8. *      .
  9. *      .
  10. *      .
  11. *L0    [WHEN V=0]
  12. *      RET
  13. *L1    [WHEN V=1]
  14. *      RET
  15. *L2    [WHEN V=2]
  16. *      RET
  17. *      .
  18. *      .
  19. *      .
  20. *LN    [WHEN V=N]
  21. *      RET
  22. *
  23. *      V IS THE CONTROL VAR
  24. *      T IS A TEMPORARY (DEFAULTS TO XR0)
  25. *      L1-LN ARE LABELS
  26. *
  27. *      IF V CONTAINS M THEN LABEL LM IS CALLED
  28. *      USING CALA (RETURN BY RET, AR1 IS KILLED)
  29.  
  30. CASE   $MACRO            A,C,B     COMPUTED GOTO
  31.        $VAR L
  32.        $ASG '$$LAB' TO L.S
  33.        $ASG L.SV+1 TO L.SV    TO NEXT UNIQUE LABEL
  34.        CALL L$:L.SV:          CALL AFTER LIST
  35.        DATA :C:               LABEL LIST
  36. L$:L.SV: POP                  POP LIST ADDR TO AC
  37.        ADD  :A:,0             ADD CONTRL VAR
  38.        $IF  B.L=0
  39.        TBLR XR0               READ LABEL ADDR
  40.        LAC  XR0,0             TO AC
  41.        $ELSE
  42.        TBLR :B:               READ LABEL TO :B:
  43.        LAC  :B:,0             TO AC
  44.        $ENDIF
  45.        CALA                   CALL THE LABEL
  46.        $END